Skip to content

[Flink] Forward customer-provided fs.* options to the engine config#7048

Open
harperjiang wants to merge 3 commits into
delta-io:masterfrom
harperjiang:fstoengconf
Open

[Flink] Forward customer-provided fs.* options to the engine config#7048
harperjiang wants to merge 3 commits into
delta-io:masterfrom
harperjiang:fstoengconf

Conversation

@harperjiang

Copy link
Copy Markdown
Collaborator

What

TableConf.engineConf() previously returned an empty map, so file-system options a customer sets as table options (e.g. fs.s3a.access.key, fs.azure.account.key.<acct>.dfs.core.windows.net) never reached the Hadoop Configuration that AbstractKernelTable builds for the Delta Kernel engine.

This change copies every customer-provided key prefixed with fs. into engineConf(), mirroring the prefix-filter pattern already used by catalogConf().

public Map<String, String> engineConf() {
  return raw.entrySet().stream()
      .filter(entry -> entry.getKey().startsWith("fs."))
      .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
}

Precedence

In AbstractKernelTable.createEngine() these options are applied:

  • after the built-in fs.* defaults → customer values override the defaults
  • before vended credentials → credentials still win on collision

The apply order is unchanged.

Tests

New TableConfTest covers:

  • all fs.* keys are forwarded
  • non-fs. keys (delta.*, io.unitycatalog.*, checkpoint.frequency) are excluded
  • empty result when no fs.* keys are present
  • keys added later via update(...) are picked up

Validation (per flink/skills.md)

  • build/sbt "flink / javafmt" — clean, no changes
  • build/sbt "flink / Test / javafmt" — clean, no changes
  • build/sbt "flink / test" — 202 total, 0 failed, 198 passed, 4 skipped
  • build/sbt "flink / Compile / doc" — success

Note

This forwards all fs.* options verbatim, including any secrets a customer supplies as table options. That is consistent with how the built-in defaults and vended credentials already flow into the engine Configuration.

Tracking: #5901

This pull request and its description were written by Isaac.

@harperjiang harperjiang force-pushed the fstoengconf branch 2 times, most recently from 6c74177 to 5d2446f Compare June 18, 2026 22:23
TableConf.engineConf() previously returned an empty map, so file-system
options a customer set as table options (e.g. fs.s3a.access.key,
fs.azure.account.key.<acct>) never reached the Hadoop Configuration that
AbstractKernelTable builds for the Delta Kernel engine.

Copy every customer-provided key prefixed with "fs." into engineConf(),
mirroring the prefix-filter pattern already used by catalogConf(). These
are applied after the built-in fs.* defaults (so customer values override
them) and before vended credentials (so credentials still win on
collision) in AbstractKernelTable.createEngine().

Add TableConfTest covering fs.* inclusion, non-fs exclusion, the empty
case, and keys added later via update().

Co-authored-by: Isaac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants